package com.erp.erp_dao.business;


import com.erp.erp_entitys.Customer.CustomerInformationRecordReq;
import com.erp.erp_entitys.Customer.CustomerInformationRecordRes;
import com.erp.erp_entitys.business.entity.ExportContractEntity;
import com.erp.erp_entitys.business.req.*;
import com.erp.erp_entitys.business.rsp.*;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * 出口业务-外销主表(ExportContract)表数据库访问层
 *
 * @author lst
 * @since 2021-01-17 10:28:17
 */
public interface IExportContractDao {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    ExportContractEntity queryById(Integer id);
    /**
     * 通过外销合同号查询单条数据
     * @param billNo 外销合同号
     * @return 实例对象
     */
    ExportContractEntity queryByBillNo(String billNo);

    /**
     * 通过实体作为筛选条件查询
     *
     * @param exportContract 实例对象
     * @return 对象列表
     */
    List<ExportContractEntity> queryAll(ExportContractEntity exportContract);

    /**
     * 新增数据
     *
     * @param exportContract 实例对象
     * @return 影响行数
     */
    int insert(ExportContractEntity exportContract);

    /**
     * 修改数据
     *
     * @param exportContract 实例对象
     * @return 影响行数
     */
    int update(ExportContractEntity exportContract);


    /**
     * 获取外销集合
     * @param req 查询参数
     * @return 外销集合
     */
    List<ExportContractEntity> getExportContractListInfo(ExportContractPageListInfoReq req);

    /**
     * 获取外销集合
     * @param req 查询参数
     * @return 外销集合
     */
    List<ExportContractEntity> queryImportContractInfo(ImportExportContractInfoReq req);


    /**
     * 统计1
     * @param req 查询参数
     * @return 统计1
     */
    List<ContractStatisticsOneRsp> getContractStatisticsOne(ContractStatisticsOneReq req);

    /**
     * 统计2
     * @param req 查询参数
     * @return 统计2
     */
    List<ContractStatisticsTwoRsp> getContractStatisticsTwo(ContractStatisticsTwoReq req);


    /**
     * 根据参数返回logo的url
     * @param id 签约公司编码
     * @return
     */
    CompanyLogo getImgLogoUrl(Integer id);

    /**
     * 获取本月外销合同数量
     * @param req 查询条件
     * @return 总和
     */
    long getExportBillNoCount(StatisticsInfoReq req);

    /**
     * 获取本月外销合同数量
     * @param req 查询参数
     * @return 本月外销合同数量
     */
    List<ExportContractEntity> getExportInfo(StatisticsInfoReq req);

    /**
     * 获取报价单号、以及报价在外销中的数量
     * @param req 查询参数
     * @return 报价单号、以及报价在外销中的数量
     */
    StatisticsOfferBillNoRsp getStatisticsOfferBillNo(StatisticsInfoReq req);

    /**
     * 控制台-获取外销信息
     * @param req 查询参数
     * @return 外销信息
     */
    List<StatisticsExportInfoRsp> getStatisticsExportInfo(StatisticsInfoReq req);


    /**
     * 客户订单第一次记录 统计
     * @param req
     * @return
     */
    List<CustomerInformationRecordRes> getFirstCustomerInfoList(CustomerInformationRecordReq req);

    /**
     * 根据客户编码获取该客户已使用信用额度
     * @param customerCode 客户编码
     * @return 客户已使用信用额度
     */
    BigDecimal getSumTotalContractAmount(@Param("customerCode") String customerCode);


    /**
     * 外销产品交期一览表统计
     * @param req
     * @return
     */
    List<DeliveryDateInfoRes> getDeliveryDateInfoList(DeliveryDateInfoReq req);

    /**
     * 客户订单统计
     * @param req 查询条件
     * @return 客户订单统计
     */
    List<ContractCustomerInfoRsp> getContractCustomerInfo(ContractCustomerInfoReq req);


    /**
     * 外销费用统计
     */
    List<ExportExpensesRes> getExportExpensesList(ExportExpensesReq req);


    /**
     * 查询该客户是否做过外销,
     */
    List<ExportContractEntity> findExportContractByParam(@Param("customerCode") String customerCode);

}